from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
from enum import Enum

# 消息类型枚举
class MessageType(str, Enum):
    USER_TO_ADMIN = "user_to_admin"      # 用户发给管理员
    ADMIN_TO_USER = "admin_to_user"      # 管理员发给用户
    SYSTEM = "system"                    # 系统消息

# 消息状态枚举
class MessageStatus(str, Enum):
    UNREAD = "unread"                    # 未读
    READ = "read"                        # 已读
    REPLIED = "replied"                  # 已回复

# 消息基础模式
class MessageBase(BaseModel):
    # 消息标题
    title: str
    # 消息内容
    content: str

# 用户发送消息模式
class UserMessageCreate(MessageBase):
    pass  # 用户发送消息时不需要指定接收者，系统自动发给管理员

# 管理员发送消息模式
class AdminMessageCreate(MessageBase):
    # 接收者ID（指定发给哪个用户）
    receiver_id: int
    # 父消息ID（回复消息时使用）
    parent_id: Optional[int] = None

# 消息回复模式
class MessageReply(BaseModel):
    # 回复内容
    content: str

# 消息响应模式
class MessageResponse(MessageBase):
    # 消息ID
    id: int
    # 发送者ID
    sender_id: int
    # 接收者ID
    receiver_id: int
    # 发送者用户名
    sender_username: str
    # 接收者用户名
    receiver_username: str
    # 消息类型
    message_type: MessageType
    # 消息状态
    status: MessageStatus
    # 父消息ID
    parent_id: Optional[int] = None
    # 创建时间
    created_at: datetime
    # 阅读时间
    read_at: Optional[datetime] = None
    
    class Config:
        from_attributes = True
        # 配置时间序列化格式为易读格式
        json_encoders = {
            datetime: lambda v: v.strftime("%Y-%m-%d %H:%M:%S") if v else None
        }

# 消息列表响应模式
class MessageListResponse(BaseModel):
    # 消息列表
    messages: List[MessageResponse]
    # 总数
    total: int
    # 当前页
    page: int
    # 每页数量
    size: int
    # 总页数
    pages: int

# 未读消息统计模式
class UnreadCountResponse(BaseModel):
    # 未读消息数量
    unread_count: int